#ifndef PRUEBACONTEXTO_H_
#define PRUEBACONTEXTO_H_

#define private public

#include <iostream>
#include "../Contexto.h"

using namespace Toolkit;
using namespace std;

bool pruebaAumentarFrecuencia()
{
	bool resultadoPrueba = true;
	Contexto contexto;

	resultadoPrueba = (256 == contexto.getTotal());

	char caracter = 'a';

	resultadoPrueba = (1 == contexto.getApariciones(caracter));

	contexto.aumentarFrecuencia(caracter);
	contexto.aumentarFrecuencia(caracter);
	contexto.aumentarFrecuencia(caracter);

	resultadoPrueba = (259 == contexto.getTotal());

	resultadoPrueba = (4 == contexto.getApariciones(caracter));

	if (!resultadoPrueba)
	{
		cout << "funciona mal AumentarFrecuencia";
	}

	return resultadoPrueba;
}

bool pruebaSumarAparicionesPrevias()
{
	bool resultadoPrueba = true;
	Contexto contexto;

	char caracter = 'z';
	unsigned int aux = caracter;

	resultadoPrueba = aux == contexto.sumarAparicionesPrevias(caracter);

	char caracter2 = 'a';

	contexto.aumentarFrecuencia(caracter2);
	contexto.aumentarFrecuencia(caracter2);
	contexto.aumentarFrecuencia(caracter2);

	resultadoPrueba = (aux+3) == contexto.sumarAparicionesPrevias(caracter);

	if (!resultadoPrueba)
	{
		cout << "funciona mal sumar Apariciones Previas";
	}

	return resultadoPrueba;
}

bool pruebaCalcularProbabilidad()
{
	bool resultadoPrueba = true;
	Contexto contexto;

	double probabilidadSimbolo, probabilidadSimboloAnterior;

	char caracter = 'a';
	contexto.calcularProbabilidad(caracter, probabilidadSimboloAnterior, probabilidadSimbolo);

	double caracDouble = caracter;

	resultadoPrueba = ((probabilidadSimboloAnterior == (caracDouble/256)) &&
					   (probabilidadSimbolo == ((caracDouble+1)/256)));

	if (!resultadoPrueba)
	{
		cout << "funciona mal sumar calcular probabilidad";
	}

	return resultadoPrueba;
}

void pruebaGeneralContexto()
{
	bool resultadoPrueba = true;

	resultadoPrueba = resultadoPrueba && pruebaAumentarFrecuencia();
	resultadoPrueba = resultadoPrueba && pruebaSumarAparicionesPrevias();
	resultadoPrueba = resultadoPrueba && pruebaCalcularProbabilidad();

	if (resultadoPrueba)
	{
		cout << "OK";
	}
}


#endif /* PRUEBACONTEXTO_H_ */
